package com.atguigu.exer;

import org.junit.Test;

/**
 * @author yihu
 * @create 2021-02-26 16:04
 * @email: 1057202547@qq.com
 * @dec: 反转指定位置的字符串
 */
public class StringDemo {
    /*
        将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”
        方式一：转换为char[]
     */
    public  String reverse(String str,int startIndex, int endIndex) {
        if(str!=null && str.length()!=0){
            char[] strCharArr = str.toCharArray();
            for (int x = startIndex,y=endIndex; x <y ; x++,y--) {
                char temp = strCharArr[x];
                strCharArr[x] = strCharArr[y];
                strCharArr[y] = temp;
            }
            return  new String(strCharArr);
        }else {
            return null;
        }
    }

    @Test
    public  void  test(){
        String str1 = "abcdefg";
        System.out.println(reverse(str1,2,5));
    }

    /**
     * 方式二：使用String 的拼接操作
     */
     public  String reverse1(String str,int startIndex,int endIndex){
         if(str!=null){
             //截取第一部分的字符串
             String reverseStr = str.substring(0,startIndex);
             //将要反转的地方反转 并拼接前面的
             for (int i = endIndex; i >= startIndex ; i--) {
                 reverseStr += str.charAt(i);
             }
             //将后面的部分拼接
             reverseStr+= str.substring(endIndex + 1);

             return  reverseStr;
         }
         return  null;

     }

    @Test
    public  void  test2(){
        String str1 = "abcdefg";
        System.out.println(reverse1(str1,2,5));
    }

    /**
     * 使用 StringBuffter/StringBuilder
     */

    public  String reverse2(String str,int startIndex,int endIndex){
        if(str!=null){
            //创建一个长度为字符串长度的StringBuilder 已免阔容影响性能
            StringBuilder builder = new StringBuilder(str.length());

            //将第一部分添加进去
            builder.append(str.substring(0,startIndex));

            //将要反转的部分添加进去
            for (int i = endIndex; i >= startIndex ; i--) {
                builder.append(str.charAt(i));
            }

            //将第三部分添加进去
            builder.append(str.substring(endIndex + 1));

            return  builder.toString();
        }

        return  null;

    }

    @Test
    public  void  test3(){
        String str1 = "abcdefg";
        System.out.println(reverse2(str1,2,5));
    }

}
